1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 import java.io.*;
33
34 public class Test {
35 public static void main(String[] args) throws Exception {
36 ByteArrayOutputStream bout = new ByteArrayOutputStream();
37 ObjectOutputStream oout = new ObjectOutputStream(bout);
38 byte[] b = new byte[10];
39 int[][] badBounds =
40 { { -1, -1}, { -1, 5 }, { 5, -1 }, { 100, 5 }, { 5, 100 } };
41
42 for (int i = 0; i < badBounds.length; i++) {
43 try {
44 oout.write(null, badBounds[i][0], badBounds[i][1]);
45 throw new Error();
46 } catch (NullPointerException e) {
47 }
48 }
49 for (int i = 0; i < badBounds.length; i++) {
50 try {
51 oout.write(b, badBounds[i][0], badBounds[i][1]);
52 throw new Error();
53 } catch (IndexOutOfBoundsException e) {
54 }
55 }
56 oout.write(b);
57 oout.flush();
58
59 ObjectInputStream oin = new ObjectInputStream(
60 new ByteArrayInputStream(bout.toByteArray()));
61 for (int i = 0; i < badBounds.length; i++) {
62 try {
63 oin.read(null, badBounds[i][0], badBounds[i][1]);
64 throw new Error();
65 } catch (NullPointerException e) {
66 }
67 }
68 for (int i = 0; i < badBounds.length; i++) {
69 try {
70 oin.read(b, badBounds[i][0], badBounds[i][1]);
71 throw new Error();
72 } catch (IndexOutOfBoundsException e) {
73 }
74 }
75 oin.read(b);
76 }
77 }